package com.service;

import com.dao.ScheduleDao;
import com.dao.TypeDao;
import com.dto.TypeDTO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.po.BookPO;
import com.po.TypePO;
import com.util.RestException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.util.Collection;
import java.util.List;

/**
 * @author linyukun
 * @date 2022/7/7 18:43
 */
@Service
public class TypeServiceImpl {

    @Autowired
    private TypeDao typeDao;

    @Autowired
    private BookServiceImpl bookServiceImpl;

    @Autowired
    private ScheduleDao scheduleDao;


    /**
     * 获取图书的类型列表所有
     * @author linyukun
     * @date 2022-07-07 19:47
     */
    public List<TypePO> getAllTypeList() {
        return typeDao.getTypeList(new TypeDTO());
    }

     /**
       * 获取图书的类型列表
       * @author linyukun
       * @date 2022-07-07 18:45
     */
    public PageInfo getTypeList(TypeDTO dto) {
        PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
        return new PageInfo(typeDao.getTypeList(dto));
    }


     /**
       * 删除图书类型
       * @author linyukun
       * @date 2022-07-07 18:59
     */
    public void delTypeById(TypeDTO dto) {
        if(ObjectUtils.isEmpty(dto.getId())){
            throw new RestException("请传递id");
        }
        List<BookPO> books = bookServiceImpl.getBookListByTypeId(dto.getId());
        if(!CollectionUtils.isEmpty(books)){
            throw new RestException("该类型下面尚有书籍，还不能删除");
        }
        typeDao.delTypeById(dto);
    }


     /**
       * 新增图书类型
       * @author linyukun
       * @date 2022-07-07 18:59
     */
    public void addType(TypeDTO dto) {
        if(StringUtils.isBlank(dto.getName())){
            throw new RestException("请传递类型名称");
        }
        //region 判断这个分类名称是否存在了
        TypePO existType = typeDao.judgeTypeExist(dto);
        if(!ObjectUtils.isEmpty(existType)){
            throw new RestException("请父类型下面的类型名称已经存在");
        }
        //endregion 判断这个分类名称是否存在了
        typeDao.addType(dto);
        scheduleDao.updateTypeBelongType();
    }

    /**
     * 修改图书类型
     * @author linyukun
     * @date 2022-07-07 18:59
     */
    public void editTypeById(TypeDTO dto) {
        if(ObjectUtils.isEmpty(dto.getId())){
            throw new RestException("请传递id");
        }
        if(StringUtils.isBlank(dto.getName())){
            throw new RestException("请传递类型名称");
        }

        //region 判断这个分类名称是否存在了
        TypePO existType = typeDao.judgeTypeExist(dto);
        if(!ObjectUtils.isEmpty(existType)){
            throw new RestException("请父类型下面的类型名称已经存在");
        }
        //endregion 判断这个分类名称是否存在了

        typeDao.editTypeById(dto);
        scheduleDao.updateTypeBelongType();

    }


}
